## Библиотека PlusIrbis

### Введение

`PlusIrbis` представляет собой простую библиотеку для создания клиентских приложений для системы автоматизации библиотек ИРБИС64 на языке C++11.

Пакет не требует irbis64_client.dll. Успешно работает на 32-битных и 64-битных версиях операционных систем Windows, Linux и MacOS X.

Основные возможности библиотеки:

* Поиск и расформатирование записей.
* Создание и модификация записей, сохранение записей в базе данных на сервере.
* Работа с поисковым словарем: просмотр терминов и постингов.
* Администраторские функции: получение списка пользователей, его модификация, передача списка на сервер, создание и удаление баз данных.

Библиотека может использоваться как в статическом варианте, так и в виде динамически загружаемой библиотеки (DLL).

### Сборка

#### define

Для всех поддерживаемых платформ:

* `PLUSIRBIS_LIBRARY` -- непосредственно для `irbis.lib`;
* `IRBIS_DYNAMIC_LIBRARY` -- сборка динамической библиотеки.

##### Visual Studio 2015/2017/2019

* `IRBIS_WINDOWS` -- сборка для Windows (определяется автоматически при сборке под Windows);
* `_DEBUG` -- отладочная версия;
* `NDEBUG` -- релизная версия;
* `_CONSOLE` -- консольное приложение;
* `_CRT_SECURE_NO_WARNINGS` -- отключение сообщений об небезопасных функциях (TODO избавиться).

##### MinGW

* `IRBIS_MINGW`

##### Linux

* `IRBIS_UNIX` -- сборка для UNIX-подобной системы (определяется автоматически при сборке под соответствующей системой);

##### FreeBSD

* `IRBIS_UNIX` -- сборка для UNIX-подобной системы (определяется автоматически при сборке под FreeBSD);
* `IRBIS_FREEBSD` -- сборка для FreeBSD (определяется автоматически при сборке под FreeBSD).

##### Mac OS X

* `IRBIS_UNIX` -- сборка для UNIX-подобной системы (определяется автоматически при сборке под OS X);
* `IRBIS_APPLE` -- сборка для OS X (определяется автоматически при сборке под OS X);

##### Прочие определения

* `IRBIS_CALL` -- соглашение о вызовах: `int __fastcall func (int arg)`;
* `IRBIS_NAKED` -- функция без пролога/эпилога: `__declspec(naked) int func (int arg)`;
* `IRBIS_NOTHROW` -- nothrow-функция: `void __declspec(nothrow) func (int arg)`;
* `IRBIS_RESTRICT` -- для аргументов функции: `int func (char* __restrict ptr1, int* __restrict ptr2)`;
* `IRBIS_NOEXCEPT` -- для функций: `int func() noexcept`;

[Следующая глава](chapter2.md)
